import java.util.List;

public class 责任链模式 {
    public static void main(String[] args) {
        double[] requests = {5000, 20000, 70000, 100000};
        ChainOfResponsibility.code(requests);
    }

}

//抽象处理者
abstract  class Approver {
    protected Approver nextApprover; // 下一个处理者
    /**
     * 设置下一个处理者
     * @param nextApprover 下一个处理者
     */
    public void setNextApprover(Approver nextApprover) {
        this.nextApprover = nextApprover;
    }
    /**
     * 处理请求的方法
     * @param amount 请求的金额
     */
    public abstract void approveRequest(double amount);
}

///具体处理者

// 经理处理者
class Manager extends Approver {
    @Override
    public void approveRequest(double amount) {
        if (amount <= 10000) {
            System.out.println("经理批准了金额为 " + amount + " 的请求。");
        } else if (nextApprover != null) {
            nextApprover.approveRequest(amount); // 转交给下一个处理者
        } else {
            System.out.println("请求金额过大，无人能够批准。");
        }
    }
}
// 总监处理者
 class Director extends Approver {
    @Override
    public void approveRequest(double amount) {
        if (amount <= 50000) {
            System.out.println("总监批准了金额为 " + amount + " 的请求。");
        } else if (nextApprover != null) {
            nextApprover.approveRequest(amount); // 转交给下一个处理者
        } else {
            System.out.println("请求金额过大，无人能够批准。");
        }
    }
}
// CEO处理者
 class CEO extends Approver {
    @Override
    public void approveRequest(double amount) {
        System.out.println("CEO批准了金额为 " + amount + " 的请求。");
    }
}


//责任链封装-
  class ChainOfResponsibility {
    public static void code( double[] requests )
    {
        //创建责任链
        Approver manager = new Manager();
        Approver director = new Director();
        Approver ceo = new CEO();

        manager.setNextApprover(director);
        director.setNextApprover(ceo);
        for (double amount : requests) {
            System.out.println("请求审批金额：" + amount);
            manager.approveRequest(amount); // 从责任链的起点开始处理
            System.out.println("--------------------------");
        }

    }

}
